package com.maimang.platform.crm.config;


import com.maimang.platform.crm.utils.StringUtils;
import com.maimang.platform.crm.utils.YamlUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;

/**
 * 全局配置类
 *
 * @author Rocky
 */
public class Global {
	private static final Logger log = LoggerFactory.getLogger(Global.class);

	private static String NAME = "application.yml";

	public static String GEN_CONFIG = "config/generator.yml";

	/**
	 * 当前对象实例
	 */
	private static Global global = null;

	/**
	 * 保存全局属性值
	 */
	private static Map<String, String> map = new HashMap<String, String>();

	private Global() {
	}

	/**
	 * 静态工厂方法 获取当前对象实例 多线程安全单例模式(使用双重同步锁)
	 */

	public static synchronized Global getInstance() {
		if (global == null) {
			synchronized (Global.class) {
				if (global == null)
					global = new Global();
			}
		}
		return global;
	}

	/**
	 * 获取配置
	 */
	public static String getConfig(String key) {
		return getConfigValue(NAME, key);
	}

	/**
	 * @param fileName 配置文件路径
	 * @param key      配置的键
	 * @return
	 */
	public static String getConfigValue(String fileName, String key) {
		String value = map.get(key);
		if (value == null) {
			Map<?, ?> yamlMap = null;
			try {
				yamlMap = YamlUtil.loadYaml(fileName);
				value = String.valueOf(YamlUtil.getProperty(yamlMap, key));
				map.put(key, value != null ? value : StringUtils.EMPTY);
			} catch (FileNotFoundException e) {
				log.error("获取全局配置异常 {}", key);
			}
		}
		return value;
	}

	/**
	 * 获取配置
	 */
	public static String getGeneratorConfig(String key) {
		return getConfigValue(GEN_CONFIG, key);
	}

	/**
	 * 设置配置
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static void setConfig(String fileName, String key, String value) {
		if (value != null) {
			Map<?, ?> yamlMap = null;
			try {
				fileName = StringUtils.isEmpty(fileName) ? NAME : fileName;
				yamlMap = YamlUtil.loadYaml(fileName);
				YamlUtil.setProperty(yamlMap, key, value);
				map.put(key, value != null ? value : StringUtils.EMPTY);
			} catch (FileNotFoundException e) {
				log.error("设置全局配置异常 {}", key);
			}
		}
	}

	/**
	 * 获取项目名称
	 */
	public static String getName() {
		return StringUtils.nvl(getConfig("platform.name"), "platform");
	}

	/**
	 * 获取项目版本
	 */
	public static String getVersion() {
		return StringUtils.nvl(getConfig("platform.version"), "1.0.0");
	}

	/**
	 * 获取版权年份
	 */
	public static String getCopyrightYear() {
		return StringUtils.nvl(getConfig("platform.copyrightYear"), "2019");
	}

	/**
	 * 获取ip地址开关
	 */
	public static Boolean isAddressEnabled() {
		return Boolean.valueOf(getConfig("platform.addressEnabled"));
	}

	/**
	 * 获取文件上传路径
	 */
	public static String getProfile() {
		return getConfig("platform.profile");
	}

	/**
	 * 获取头像上传路径
	 */
	public static String getAvatarPath() {
		return getConfig("platform.profile") + "avatar/";
	}

	/**
	 * 获取下载上传路径
	 */
	public static String getDownloadPath() {
		return getConfig("platform.profile") + "download/";
	}

	/**
	 * 获取上传路径
	 */
	public static String getUploadPath() {
		return getConfig("platform.profile") + "upload/";
	}

	/**
	 * 获取作者
	 */
	public static String getAuthor() {
		return StringUtils.nvl(getGeneratorConfig("gen.author"), "Rocky");
	}

	/**
	 * 获取官网地址
	 */
	public static String getWebsite() {
		return StringUtils.nvl(getConfig("company.url"), "Rocky");
	}

	/**
	 * 获取官网地址
	 */
	public static String getCompanyName() {
		return StringUtils.nvl(getConfig("company.name"), "西安麦芒信息科技有限公司");
	}

	/**
	 * 获取联系人姓名
	 */
	public static String getContacts() {
		return StringUtils.nvl(getConfig("company.contacts"), "赵锦涛");
	}

	/**
	 * 获取联系人姓名
	 */
	public static String getTelephone() {
		return StringUtils.nvl(getConfig("company.telephone"), "赵锦涛");
	}

	/**
	 * 获取Email
	 *
	 * @return
	 */
	public static String getEmail() {
		return StringUtils.nvl(getGeneratorConfig("gen.email"), "jintaozhao@qq.com");
	}


	/**
	 * 生成包路径
	 */
	public static String getPackageName() {
		return StringUtils.nvl(getGeneratorConfig("gen.packageName"), "com.maimang.platform");
	}

	/**
	 * 生成页面路径
	 */
	public static String getModuleName() {
		return StringUtils.nvl(getGeneratorConfig("gen.moduleName"), "");
	}

	/**
	 * 是否自动去除表前缀
	 */
	public static String getAutoRemovePre() {
		return StringUtils.nvl(getGeneratorConfig("gen.autoRemovePre"), "true");
	}

	/**
	 * 表前缀(类名不会包含表前缀)
	 */
	public static String getTablePrefix() {
		return StringUtils.nvl(getGeneratorConfig("gen.tablePrefix"), "sys_");
	}

	/**
	 * 获取Jwt超时时间
	 *
	 * @return
	 */
	public static int getJwtOutTime() {
		return Integer.valueOf(getConfig("platform.jwt.outTime"));
	}

	/**
	 * 获取是否开启redis
	 *
	 * @return
	 */
	public static boolean hasRedis() {
		return Boolean.valueOf(getConfig("spring.redis.enable"));
	}
}
